#include <iostream>

using namespace std;

const int N = 1e5 + 10, M = 1e6 + 10;

int e[N], ne[N], h, id;
int mp[M]; // map[i]标记i出现在链表的什么位置

void insert(int x, int y) // 把 y 插入到 x 的后面
{
	++id;
	e[id] = y;
	mp[y] = id;

	ne[id] = ne[mp[x]];
	ne[mp[x]] = id;
}

int main()
{
	int q; cin >> q;

	insert(1, h); // 初始化
	
	while(q--)
	{
		int op, x; cin >> op >> x;
		int i = mp[x]; // 标记 x 这个元素存的位置

		if(op == 1) // 插入
		{
			int y; cin >> y;
			insert(x, y);
		}
		else if(op == 2) // 查找x后面的元素
		{
			
			cout << e[ne[i]] << endl;
		}
		else // 删除x后面的元素
		{
			ne[i] = ne[ne[i]];
		}
	}

	return 0;
}